#ifndef POINT_H
#define POINT_H

#include "defs.h"
#include "model/matrixtransformation.h"

class Point {

    //-------------------------------------------------------------//
    //                          ATTRIBUTES                         //
    //-------------------------------------------------------------//

public:
    coord x, y, z;

    //-------------------------------------------------------------//
    //                          METHODS                            //
    //-------------------------------------------------------------//

public:

    Point(coord x = 0, coord y = 0, coord z = 0);

    Point unit() const;

    Point vetorial (const Point& p) const;

    Point operator- (const Point& p) const;

    Point operator+ (const Point& p) const;

    Point operator* (coord n) const;

    Point operator/ (coord n) const;

    coord operator* (const Point& p) const;

    coord distance() const;

    bool operator== (const Point& p) const;

    virtual void apply(const MatrixTransformation& m);

    //-------------------------------------------------------------//
    //                          STATIC                             //
    //-------------------------------------------------------------//

public:

    static Point max();

    static Point min();
};

#endif // POINT_H

